package com.wang.springbootinit.controller.admin;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wang.springbootinit.common.BaseResponse;
import com.wang.springbootinit.common.ResultUtils;
import com.wang.springbootinit.model.dto.StudentBatchAddRequest;
import com.wang.springbootinit.model.dto.StudentUpdateRequest;
import com.wang.springbootinit.model.dto.admin.AdminStudentQueryRequest;
import com.wang.springbootinit.model.vo.StudentVO;
import com.wang.springbootinit.service.StudentService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;


/**
 * 后台，学生管理
 */
@RestController
@RequestMapping("/admin/student")
public class AdminStudentController {
    @Resource
    private StudentService studentService;

    /**
     * 分页查询学生列表
     * 支持按学号、姓名、班级、专业、性别进行模糊搜索
     *
     * @return 分页查询结果
     */
    @GetMapping("/list")
    public BaseResponse<Page<StudentVO>> listStudents(AdminStudentQueryRequest request) {
        return ResultUtils.success(studentService.listStudents(request));
    }


    /**
     * 获取学生详细信息
     * @param id 学生ID
     * @return 学生详细信息
     */
    @GetMapping("/get")
    public BaseResponse<StudentVO> getStudentById(@RequestParam Long id) {
        return ResultUtils.success(studentService.getStudentVOById(id));
    }

    /**
     * 更新学生信息
     * @param updateRequest 学生信息更新请求
     * @return 更新结果
     */
    @PostMapping("/update")
    public BaseResponse<Boolean> updateStudent(@RequestBody StudentUpdateRequest updateRequest) {
        return ResultUtils.success(studentService.updateStudent(updateRequest));
    }

    /**
     * 删除学生
     * @param id 学生ID
     * @return 删除结果
     */
    @PostMapping("/delete/{id}")
    public BaseResponse<Boolean> deleteStudent(@PathVariable("id") Long id) {
        return ResultUtils.success(studentService.deleteStudent(id));
    }

    /**
     * 根据班级批量添加学生
     * @param addRequest 添加学生请求（包含班级ID和学生信息列表）
     * @return 添加结果
     */
    @PostMapping("/add")
    public BaseResponse<Boolean> addStudentsByClass(@RequestBody StudentBatchAddRequest addRequest) {
        return ResultUtils.success(studentService.addStudentsByClass(addRequest));
    }
}
